package com.lagou.rpc.consumer;

import com.lagou.zkutils.GetCuratorClient;
import org.apache.curator.framework.CuratorFramework;

import java.util.List;

public class ScheduleTask implements Runnable {

    private CuratorFramework zkClient;

    public ScheduleTask(CuratorFramework zkClient) {
        this.zkClient = zkClient;
    }

    @Override
    public void run() {
        try {
            // 查询 /lg-rpc 下的所有子节点
            List<String> stringPaths = zkClient.getChildren().forPath(GetCuratorClient.path);
            for (String stringPath : stringPaths) {// 一个stringPath代表  一个服务器节点
                // 获取到每一个服务器对应的节点上的内容，这里存储的是执行时间和响应时间 例如：执行时间:响应时间
                byte[] bytes = zkClient.getData().forPath(GetCuratorClient.path + "/" + stringPath);
                String data = new String(bytes);
                String[] split = data.split(":");
                if (split.length != 2){
                    continue;
                }
                // 最后一次执行时间
                long lastTime = Long.parseLong(split[0]);
                if (System.currentTimeMillis() - lastTime > 5000){// 如果当前时间-上一次执行时间 >5s
                    // 把响应时间重置为0
                    ClientBootStrap.serverMap.get(stringPath).setUsedTime(0);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
